package co.fitstart.mobile.service;

import java.util.List;

import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.course.schedule.CourseSchedule;
import co.fitstart.entity.courseware.fitnessgroup.BatchCourseware;
import co.fitstart.entity.courseware.fitnessgroup.BatchCoursewareType;
import co.fitstart.entity.courseware.fitnessgroup.Courseware;
import co.fitstart.entity.courseware.fitnessgroup.DailyCourseware;

/**
 * 
 * @author mohanlan
 *
 */
public interface CoursewareService {
    
    /**
     * List batch course ware by type
     * 
     * @param courseRound
     * @param type
     * @return
     */
    public List<BatchCourseware> listGeneratedCourseware(CourseRound courseRound, BatchCoursewareType type);
    
    /**
     * 
     * @param courseRound
     * @param type
     * @return
     */
    public List<BatchCourseware> listBatchCourseware(CourseRound courseRound, BatchCoursewareType type);
    
    /**
     * 
     * @param batchCourseware
     * @param type
     * @return
     */
    public List<DailyCourseware> listGeneratedCourseware(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param courseround
     * @param type
     * @param sorting
     * @return
     */
    public BatchCourseware loadGeneratedCourseware(CourseRound courseround, BatchCoursewareType type, int sorting);
    
    /**
     * Load batch course ware by id
     * 
     * @param batchId
     * @return
     */
    public BatchCourseware loadBatchCourseware(Long batchId);
    
    /**
     * Load daily course ware by id
     * @param dailyId
     * @return
     */
    public DailyCourseware loadDailyCourseware(Long dailyId);
    
    /**
     * 
     * @param courseRound
     * @param type
     * @return
     */
    public BatchCourseware getBatchCourseware(CourseRound courseRound, BatchCoursewareType type);
    
    /**
     * 
     * @param courseRound
     * @param type
     * @param sorting
     * @return
     */
    public BatchCourseware getBatchCourseware(CourseRound courseRound, BatchCoursewareType type, int sorting);
    
    /**
     * 
     * @param batchCourseware
     * @return
     */
    public DailyCourseware getDailyCourseware(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param batchCourseware
     * @param sorting
     * @return
     */
    public DailyCourseware getDailyCourseware(BatchCourseware batchCourseware, int sorting);
    
    /**
     * list course courseware by dailyCourseware
     * @param dailyCourseware
     * @return
     */
    public List<Courseware> listCourseCourseware(DailyCourseware dailyCourseware);
    
    /**
     * 
     * @param courseSchedule
     * @return
     */
    public List<Courseware> listCoursewareByCourseSchedule(CourseSchedule courseSchedule);
    
    /**
     * 
     * @param courseRound
     * @return
     */
    public List<CourseSchedule> listCourseSchedule(CourseRound courseRound);
    
    /**
     * 
     * @param courseSchedule
     * @return
     */
    public List<Courseware> listCourseWares(CourseSchedule courseSchedule);
    
    /**
     * 
     * @param courseSchedule
     * @return
     */
    public int getRank(CourseSchedule courseSchedule);
}
